Skip to main content

了解 Kubernetes 架構

kubernetes_architecture.jpg

Kubernetes Master

Control Plane

ETCD

  • 用來存放 K8s Cluster 的資料作為備份,想像為整個集群的 database,記錄整個集群的狀態及資料。當 Controller Plane 故障時,可以透過 etcd 幫我們還原 Kubernetes 的狀態

    ETCD

kube-scheduler

負責集群的資源調配,調度 Pod 運行在哪個 Node 上,是整個 Kubernetes 集群的調度員

kube-controller-manager

負責管理並運行 K8s controller 的組件,負責監視 Cluster 狀態的組件,是 K8s 中所有 resource-objects 的自動化控制中心。kube-controller-manager 又可以細分為:

  • Controller-Manager
  • Node-Controller
  • Replication-Controller

API Server

Kubernetes 的 API Server 是一个 client / server 的架构

  • 通过 HTTP 对外提供 RESTful API 服务,client 提交请求,server 回复
  • 是无状态的 stateless,所有的状态都存储在 cluster store 里(etcd)
  • 集群中各個節點的溝通橋樑,並管理整個 K8s 所需 API 的接口(Endpoint)。一旦 kube-apiserver故障,整個集群就會無法操作,例如無法新增、刪除 Pod
  • kube-apiserver也負責 K8s 中的請求的身份認證與授權

Clients

  • kubectl
  • RESTful API
  • other clients

API Object

通过 API server 可以操作的 Kubernetes 对象,它们代表了整个集群的状态

  • Example
apiVersion: v1
kind: Pod
metadata:name: web
spec:containers:-name: nginx-container
image: nginx:latest

Node

kubelet

對應 api-server 的接口,每個Node上的實際執行者,負責接收來自api-server 的訊息,例如負責Pod對應的容器的建立、啟動或停止等。

kube-proxy

kube-proxy 是一個 network proxy,負責維護 Node 上的網路規則 (iptables),這些規則允許從群集內部或外部的與 Pod 進行通訊

Container Runtime

Node 上運行容器的執行程式,K8s 預設是 Docker,但也支援其他Runtime Engine,例如rkt、CRI-O、containerd, kata container等

Pod

  • Pod是 k8s 里最小的调度单位。
  • 可以包含 1 - 多個 Container
  • Pod 依創建方式可分為兩種
    • Static Pod
      • 不需依靠 Controller Plane 的物件,所以可以透過 Static Pod 創建屬於自己 Node 中的controller plane 物件,例如,Control Plane 中的 controller.yaml, etcd.yaml
    • kube-apiserver
  • Namespace
    • 隔離不同種類 Pod 的環境